Skip to content

[Feature] Test Python 3.14#840

Draft
jan-janssen wants to merge 10 commits intomainfrom
Py314u
Draft

[Feature] Test Python 3.14#840
jan-janssen wants to merge 10 commits intomainfrom
Py314u

Conversation

@jan-janssen
Copy link
Member

@jan-janssen jan-janssen commented Oct 8, 2025

Summary by CodeRabbit

  • Chores
    • Official Python support expanded to include 3.14; compatibility constraints updated to allow installation on Python 3.14.
    • CI configurations updated to run against Python 3.14 where applicable.
  • Tests
    • Certain integration tests are now skipped when running on Python 3.14 or newer to maintain test stability.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 8, 2025

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Widened Python compatibility and CI/test targets: pyproject metadata updated to allow Python <3.15 and add 3.14 classifier; CI workflow matrix and setup updated from 3.13→3.14; one integration test class is skipped on Python ≥3.14.

Changes

Cohort / File(s) Summary
Project metadata
pyproject.toml
Widened project.requires-python upper bound from <3.14 to <3.15; added Programming Language :: Python :: 3.14 classifier.
CI workflow
.github/workflows/pipeline.yml
Updated CI Python version occurrences from 3.13 to 3.14 across matrix entries and setup-python steps.
Integration tests
tests/integration/test_pyiron_workflow.py
Imported sys and applied unittest.skipIf(sys.version_info.minor >= 14, ...) to TestDynamicallyDefinedObjects (appears twice, effectively skipping the class on Python ≥3.14).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Poem

A rabbit hops through build and test,
Nibbling bounds to make them best.
From three-dot-fourteen we stretch a bit,
CI updated, fixtures fit.
Hooray — a tidy, versioned nest! 🥕🐇

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title '[Feature] Test Python 3.14' accurately reflects the main changes in the PR, which add Python 3.14 support to the project via pyproject.toml updates, CI workflow changes, and test adjustments.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch Py314u

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link

codecov bot commented Oct 8, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.05%. Comparing base (eb8b739) to head (b9e41ca).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #840      +/-   ##
==========================================
- Coverage   94.10%   94.05%   -0.05%     
==========================================
  Files          39       39              
  Lines        2053     2053              
==========================================
- Hits         1932     1931       -1     
- Misses        121      122       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jan-janssen jan-janssen changed the title Test Python 3.14 [Feature] Test Python 3.14 Jan 4, 2026
@jan-janssen
Copy link
Member Author

      The following packages are incompatible
      ├─ pygraphviz =1.14 * is installable with the potential options
      │  ├─ pygraphviz 1.14 would require
      │  │  └─ python_abi =3.10 *_cp310, which can be installed;
      │  ├─ pygraphviz 1.14 would require
      │  │  ├─ python >=3.11,<3.12.0a0 *, which can be installed;
      │  │  └─ python_abi =3.11 *_cp311, which can be installed;
      │  ├─ pygraphviz 1.14 would require
      │  │  ├─ python >=3.12,<3.13.0a0 *, which can be installed;
      │  │  └─ python_abi =3.12 *_cp312, which can be installed;
      │  └─ pygraphviz 1.14 would require
      │     ├─ python [>=3.13,<3.14.0a0 *_cp313|>=3.13.0rc2,<3.14.0a0 *_cp313], which can be installed;
      │     └─ python_abi =3.13 *_cp313, which can be installed;
      └─ python =3.14 * is not installable because there are no viable options
         ├─ python [3.14.0|3.14.1|3.14.2] would require
         │  └─ python_abi =3.14 *_cp314t, which conflicts with any installable versions previously reported;
         ├─ python [3.14.0|3.14.1|3.14.2] would require
         │  └─ python_abi =3.14 *_cp314, which conflicts with any installable versions previously reported;
         └─ python [3.14.0rc1|3.14.0rc2|3.14.0rc3] would require
            └─ _python_rc =* *, which does not exist (perhaps a missing channel).

@jan-janssen
Copy link
Member Author

======================================================================
ERROR: test_args (integration.test_pyiron_workflow.TestDynamicallyDefinedObjects.test_args)
We should be able to use a dynamically defined return value.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/executorlib/executorlib/tests/integration/test_pyiron_workflow.py", line 84, in test_args
    fs.result().attribute_on_dynamic,
    ~~~~~~~~~^^
  File "/home/runner/miniconda3/envs/test/lib/python3.14/concurrent/futures/_base.py", line 450, in result
    return self.__get_result()
           ~~~~~~~~~~~~~~~~~^^
  File "/home/runner/miniconda3/envs/test/lib/python3.14/concurrent/futures/_base.py", line 395, in __get_result
    raise self._exception
executorlib.standalone.interactive.communication.ExecutorlibSocketError: SocketInterface crashed during execution.
======================================================================
ERROR: test_return (integration.test_pyiron_workflow.TestDynamicallyDefinedObjects.test_return)
We should be able to use a dynamic return value -- in this case, a
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/work/executorlib/executorlib/tests/integration/test_pyiron_workflow.py", line 202, in test_return
    fs.result(),
    ~~~~~~~~~^^
  File "/home/runner/miniconda3/envs/test/lib/python3.14/concurrent/futures/_base.py", line 450, in result
    return self.__get_result()
           ~~~~~~~~~~~~~~~~~^^
  File "/home/runner/miniconda3/envs/test/lib/python3.14/concurrent/futures/_base.py", line 395, in __get_result
    raise self._exception
executorlib.standalone.interactive.communication.ExecutorlibSocketError: SocketInterface crashed during execution.
----------------------------------------------------------------------

@jan-janssen
Copy link
Member Author

Traceback (most recent call last):
  File "/home/runner/miniconda3/envs/test/lib/python3.14/site-packages/executorlib/backend/interactive_serial.py", line 93, in <module>
    main(argument_lst=sys.argv)
    ~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/miniconda3/envs/test/lib/python3.14/site-packages/executorlib/backend/interactive_serial.py", line 41, in main
    input_dict = interface_receive(socket=socket)
  File "/home/runner/miniconda3/envs/test/lib/python3.14/site-packages/executorlib/standalone/interactive/communication.py", line 270, in interface_receive
    return cloudpickle.loads(socket.recv())
           ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
TypeError: _partial_new() missing 1 required positional argument: 'func'

@jan-janssen
Copy link
Member Author

@liamhuber Somehow the integration tests fail with Python 3.14. It seems to be related to the use of partialmethod in the decorator:

def dynamic_foo():
    """
    A decorator for dynamically modifying the Foo class to test
    CloudpickleProcessPoolExecutor.

    Overrides the `fnc` input of `Foo` with the decorated function.
    """

    def as_dynamic_foo(fnc: Callable):
        return type(
            "DynamicFoo",
            (Foo,),  # Define parentage
            {"__init__": partialmethod(Foo.__init__, fnc)},
        )

    return as_dynamic_foo

I was wondering if you had similar issues with pyiron_workflow. Did you test Python 3.14 already?

@jan-janssen
Copy link
Member Author

It seems to be a cloudpickle related issue cloudpipe/cloudpickle#585

@liamhuber
Copy link
Member

I haven't tested 3.14 for workflow yet, so I'm not sure. I've done it only(?) for snippets, but that is pretty trivial.

@jan-janssen jan-janssen marked this pull request as ready for review February 22, 2026 12:53
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
.github/workflows/pipeline.yml (2)

192-221: unittest_flux_mpich and unittest_flux_openmpi intentionally left on 3.13.

Keeping flux-related jobs on 3.13 appears to be a deliberate decision (likely due to flux-core=0.81.0 and related conda packages not being available for Python 3.14). Worth adding a comment in the YAML to document why these differ from the other test jobs, to avoid confusion during future version bumps.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/pipeline.yml around lines 192 - 221, Add an inline comment
above the unittest_flux_mpich and unittest_flux_openmpi job definitions
explaining why they pin python-version: '3.13' (e.g., flux-core=0.81.0 and
related conda packages are not available on Python 3.14), so future maintainers
know the version divergence is intentional; place the comment near the job
headers (unittest_flux_mpich / unittest_flux_openmpi) and mention the dependency
(flux-core=0.81.0) and that the pin is to satisfy conda package compatibility.

44-58: mypy job still on Python 3.13 — consider whether 3.14 should be added here too.

The mypy job at Line 51 is the only type-checking job; it still runs on 3.13. While not blocking, any type-checking against 3.14-only syntax or stub differences won't be caught. If this is intentional (no 3.14-specific type changes expected), no action needed.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/pipeline.yml around lines 44 - 58, Update the mypy job to
also run under Python 3.14 so type-checking covers 3.14-specific syntax/stubs:
modify the mypy job (the job named "mypy" and its "Setup Python" step that uses
actions/setup-python@v5 and the python-version input) to either use a matrix
over python-version including "3.13" and "3.14", or add a parallel mypy job
configured with python-version: "3.14"; ensure the subsequent steps (Checkout,
Install mypy, Test) run for both Python versions.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/integration/test_pyiron_workflow.py`:
- Around line 59-62: The skip condition incorrectly uses sys.version_info.minor
twice; change the decorator's condition to compare the version tuple instead of
comparing .minor fields (e.g., replace the current sys.version_info.minor >= 14
and sys.version_info.minor >= 3 with a tuple comparison like sys.version_info >=
(3, 14) or an equivalent major/minor check) so the `@unittest.skipIf` using
sys.version_info correctly skips on Python versions >= 3.14; update the
`@unittest.skipIf` expression that references sys.version_info in the
test_pyiron_workflow.py decorator accordingly.

---

Nitpick comments:
In @.github/workflows/pipeline.yml:
- Around line 192-221: Add an inline comment above the unittest_flux_mpich and
unittest_flux_openmpi job definitions explaining why they pin python-version:
'3.13' (e.g., flux-core=0.81.0 and related conda packages are not available on
Python 3.14), so future maintainers know the version divergence is intentional;
place the comment near the job headers (unittest_flux_mpich /
unittest_flux_openmpi) and mention the dependency (flux-core=0.81.0) and that
the pin is to satisfy conda package compatibility.
- Around line 44-58: Update the mypy job to also run under Python 3.14 so
type-checking covers 3.14-specific syntax/stubs: modify the mypy job (the job
named "mypy" and its "Setup Python" step that uses actions/setup-python@v5 and
the python-version input) to either use a matrix over python-version including
"3.13" and "3.14", or add a parallel mypy job configured with python-version:
"3.14"; ensure the subsequent steps (Checkout, Install mypy, Test) run for both
Python versions.

Comment on lines +59 to +62
@unittest.skipIf(
sys.version_info.minor >= 14 and sys.version_info.minor >= 3,
"Test environment has to be Python <3.14 for dynamic objects.",
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Bug in skipIf condition: .minor used twice instead of .major + .minor.

sys.version_info.minor >= 14 and sys.version_info.minor >= 3

Both sides reference .minor. The second clause (minor >= 3) is always True when the first (minor >= 14) is, making the and entirely redundant. The condition collapses to sys.version_info.minor >= 14, which happens to work for current Python 3.x releases but would silently misbehave on a future Python 4.x (e.g., 4.0 has minor=0, so no skip even if the same cloudpickle bug persists).

The idiomatic and correct form is a tuple comparison:

🐛 Proposed fix
 `@unittest.skipIf`(
-    sys.version_info.minor >= 14 and sys.version_info.minor >= 3,
+    sys.version_info >= (3, 14),
     "Test environment has to be Python <3.14 for dynamic objects.",
 )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/test_pyiron_workflow.py` around lines 59 - 62, The skip
condition incorrectly uses sys.version_info.minor twice; change the decorator's
condition to compare the version tuple instead of comparing .minor fields (e.g.,
replace the current sys.version_info.minor >= 14 and sys.version_info.minor >= 3
with a tuple comparison like sys.version_info >= (3, 14) or an equivalent
major/minor check) so the `@unittest.skipIf` using sys.version_info correctly
skips on Python versions >= 3.14; update the `@unittest.skipIf` expression that
references sys.version_info in the test_pyiron_workflow.py decorator
accordingly.

@jan-janssen jan-janssen marked this pull request as draft February 22, 2026 13:24
@jan-janssen
Copy link
Member Author

ssssssE/home/runner/miniconda3/envs/test/lib/python3.14t/unittest/case.py:668: ResourceWarning: Unclosed socket <zmq.Socket(zmq.PAIR) at 0x3cb97240390>
2026-02-22T13:11:04.1279087Z   with outcome.testPartExecutor(self):
2026-02-22T13:11:04.1279685Z ResourceWarning: Enable tracemalloc to get the object allocation traceback
2026-02-22T13:11:04.1280685Z /home/runner/miniconda3/envs/test/lib/python3.14t/unittest/case.py:668: ResourceWarning: Unclosed context <zmq.Context() at 0x3cb980c1b10>
2026-02-22T13:11:04.1281677Z   with outcome.testPartExecutor(self):
2026-02-22T13:11:04.1282302Z ResourceWarning: Enable tracemalloc to get the object allocation traceback
2026-02-22T13:11:04.4513768Z E/home/runner/miniconda3/envs/test/lib/python3.14t/unittest/case.py:668: ResourceWarning: Unclosed socket <zmq.Socket(zmq.PAIR) at 0x3cb980c2710>
2026-02-22T13:11:04.4514748Z   with outcome.testPartExecutor(self):
2026-02-22T13:11:04.4515341Z ResourceWarning: Enable tracemalloc to get the object allocation traceback
2026-02-22T13:11:04.4516665Z /home/runner/miniconda3/envs/test/lib/python3.14t/unittest/case.py:668: ResourceWarning: Unclosed context <zmq.Context() at 0x3cb980c2590>
2026-02-22T13:11:04.4517646Z   with outcome.testPartExecutor(self):
2026-02-22T13:11:04.4518242Z ResourceWarning: Enable tracemalloc to get the object allocation traceback
2026-02-22T13:11:04.7775812Z E/home/runner/miniconda3/envs/test/lib/python3.14t/unittest/case.py:668: ResourceWarning: Unclosed socket <zmq.Socket(zmq.PAIR) at 0x3cb980c2410>
2026-02-22T13:11:04.7776993Z   with outcome.testPartExecutor(self):
2026-02-22T13:11:04.7777419Z ResourceWarning: Enable tracemalloc to get the object allocation traceback
2026-02-22T13:11:05.0621289Z Exception in thread Thread-4 (submit):
2026-02-22T13:11:05.0626602Z Traceback (most recent call last):
2026-02-22T13:11:05.0637020Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/threading.py", line 1082, in _bootstrap_inner
2026-02-22T13:11:05.0638002Z     self._context.run(self.run)
2026-02-22T13:11:05.0638466Z     ~~~~~~~~~~~~~~~~~^^^^^^^^^^
2026-02-22T13:11:05.0639258Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/threading.py", line 1024, in run
2026-02-22T13:11:05.0640194Z     self._target(*self._args, **self._kwargs)
2026-02-22T13:11:05.0640706Z     ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-02-22T13:11:05.0641960Z   File "/home/runner/work/executorlib/executorlib/tests/unit/backend/test_interactive_serial.py", line 24, in submit
2026-02-22T13:11:05.0643127Z     cloudpickle.dumps({"init": True, "fn": set_global, "args": (), "kwargs": {}})
2026-02-22T13:11:05.0643908Z     ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-02-22T13:11:05.0645008Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py", line 1529, in dumps
2026-02-22T13:11:05.0645948Z     cp.dump(obj)
2026-02-22T13:11:05.0646426Z     ~~~~~~~^^^^^
2026-02-22T13:11:05.0647380Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py", line 1295, in dump
2026-02-22T13:11:05.0648512Z     return super().dump(obj)
2026-02-22T13:11:05.0648949Z            ~~~~~~~~~~~~^^^^^
2026-02-22T13:11:05.0650096Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py", line 1380, in reducer_override
2026-02-22T13:11:05.0651184Z     return self._function_reduce(obj)
2026-02-22T13:11:05.0651607Z            ~~~~~~~~~~~~~~~~~~~~~^^^^^
2026-02-22T13:11:05.0652541Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py", line 1255, in _function_reduce
2026-02-22T13:11:05.0653869Z     if _should_pickle_by_reference(obj):
2026-02-22T13:11:05.0654294Z        ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
2026-02-22T13:11:05.0655299Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py", line 244, in _should_pickle_by_reference
2026-02-22T13:11:05.0656586Z     module_and_name = _lookup_module_and_qualname(obj, name=name)
2026-02-22T13:11:05.0657246Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py", line 296, in _lookup_module_and_qualname
2026-02-22T13:11:05.0658183Z     obj2, parent = _getattribute(module, name)
2026-02-22T13:11:05.0658602Z                    ~~~~~~~~~~~~~^^^^^^^^^^^^^^
2026-02-22T13:11:05.0659272Z   File "/home/runner/miniconda3/envs/test/lib/python3.14t/pickle.py", line 317, in _getattribute
2026-02-22T13:11:05.0659967Z     obj = getattr(obj, subpath)
2026-02-22T13:11:05.0660506Z RecursionError: Stack overflow (used 16348 kB) while calling a Python object
2026-02-22T13:11:05.0661197Z Normalization failed: type=AttributeError args=<unknown>
2026-02-22T13:11:05.0661688Z when serializing function reconstructor
2026-02-22T13:11:05.0662102Z when serializing function object

@jan-janssen
Copy link
Member Author

The minimal tests are using a different Python version:

python 3.14.3  he1279bd_1_cp314t 

versus:

 python 3.14.3  h32b2ec7_101_cp314 

@jan-janssen
Copy link
Member Author

More issues with threading without global interpreter lock:

sssssssssssssssssssssssssssssssssssssssssssssssssss........E.E..EEEE....sEE.s.EE./home/runner/miniconda3/envs/test/lib/python3.14t/subprocess.py:1138: ResourceWarning: subprocess 2663 is still running
  _warn("subprocess %s is still running" % self.pid,
ResourceWarning: Enable tracemalloc to get the object allocation traceback
/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py:720: ResourceWarning: Unclosed socket <zmq.Socket(zmq.PAIR) at 0x52a3c1c0290>
  f_globals = {k: func.__globals__[k] for k in f_globals_ref if k in func.__globals__}
ResourceWarning: Enable tracemalloc to get the object allocation traceback
/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py:720: ResourceWarning: Unclosed context <zmq.Context(1 socket) at 0x52a3c1c0150>
  f_globals = {k: func.__globals__[k] for k in f_globals_ref if k in func.__globals__}
ResourceWarning: Enable tracemalloc to get the object allocation traceback
Exception ignored while calling deallocator <function SocketInterface.__del__ at 0x52a36f74140>:
Traceback (most recent call last):
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 179, in __del__
    self.shutdown(wait=True)
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 155, in shutdown
    result = self.send_and_receive_dict(
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 106, in send_and_receive_dict
    self.send_dict(input_dict=input_dict)
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 68, in send_dict
    self._socket.send(data)
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/zmq/sugar/socket.py", line 698, in send
    return super().send(data, flags=flags, copy=copy, track=track)
  File "zmq/backend/cython/_zmq.py", line 1152, in zmq.backend.cython._zmq.Socket.send
  File "zmq/backend/cython/_zmq.py", line 1194, in zmq.backend.cython._zmq.Socket.send
  File "zmq/backend/cython/_zmq.py", line 1339, in zmq.backend.cython._zmq._check_closed
zmq.error.ZMQError: Socket operation on non-socket
/home/runner/miniconda3/envs/test/lib/python3.14t/subprocess.py:1138: ResourceWarning: subprocess 2673 is still running
  _warn("subprocess %s is still running" % self.pid,
ResourceWarning: Enable tracemalloc to get the object allocation traceback
/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py:720: ResourceWarning: Unclosed socket <zmq.Socket(zmq.PAIR) at 0x52a42260290>
  f_globals = {k: func.__globals__[k] for k in f_globals_ref if k in func.__globals__}
ResourceWarning: Enable tracemalloc to get the object allocation traceback
/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py:720: ResourceWarning: Unclosed context <zmq.Context(1 socket) at 0x52a42260150>
  f_globals = {k: func.__globals__[k] for k in f_globals_ref if k in func.__globals__}
ResourceWarning: Enable tracemalloc to get the object allocation traceback
Exception ignored while calling deallocator <function SocketInterface.__del__ at 0x52a36f74140>:
Traceback (most recent call last):
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 179, in __del__
    self.shutdown(wait=True)
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 155, in shutdown
    result = self.send_and_receive_dict(
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 106, in send_and_receive_dict
    self.send_dict(input_dict=input_dict)
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/executorlib/standalone/interactive/communication.py", line 68, in send_dict
    self._socket.send(data)
  File "/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/zmq/sugar/socket.py", line 698, in send
    return super().send(data, flags=flags, copy=copy, track=track)
  File "zmq/backend/cython/_zmq.py", line 1152, in zmq.backend.cython._zmq.Socket.send
  File "zmq/backend/cython/_zmq.py", line 1194, in zmq.backend.cython._zmq.Socket.send
  File "zmq/backend/cython/_zmq.py", line 1339, in zmq.backend.cython._zmq._check_closed
zmq.error.ZMQError: Socket operation on non-socket
/home/runner/miniconda3/envs/test/lib/python3.14t/site-packages/cloudpickle/cloudpickle.py:720: ResourceWarning: Unclosed context <zmq.Context(1 socket) at 0x52a41480150>
  f_globals = {k: func.__globals__[k] for k in f_globals_ref if k in func.__globals__}
ResourceWarning: Enable tracemalloc to get the object allocation traceback

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants